package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.MemberDao;
import com.itheima.pojo.Member;
import com.itheima.service.MemberService;
import com.itheima.utils.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * @author : [chenxys]
 * @version : [v1.0]
 * @Description : 会员管理相关操作
 * @createTime : [2022/5/30 14:27]
 */
@Service(interfaceClass = MemberService.class)
@Transactional
public class MemberServiceImpl implements MemberService {

    @Autowired
    private MemberDao memberDao;
    /**
     * 根据电话号码查询会员信息
     * @author chenxys
     * @param telephone  电话号码
     * @return com.itheima.pojo.Member
     */
    @Override
    public Member findByTelephone(String telephone) {
        return memberDao.findByTelephone(telephone);
    }

    /**
     * 保存会员信息
     * @author chenxys
     * @param member 会员信息
     */
    @Override
    public void add(Member member) {
        //保存会员信息时，为了防止有些场景下用户使用密码注册，所以判断一下密码是否为空，
        // 如果不为空，就将密码用md5加密之后放入数据库中。
        //加密方式
        // md5 散列算法 加盐
        //RSA 非对称性加密 公钥 私钥  慢
        //AES 对称性加密 秘钥 快
        String password = member.getPassword();
        if (password != null){
            //md5加密
            password = MD5Utils.md5(password);
            member.setPassword(password);
        }
        //保存用户信息
        memberDao.add(member);
    }

    /**
     * 根据月份统计会员数量
     * @author chenxys
     * @param month 月份
     * @return java.util.List<java.lang.Integer>
     */
    @Override
    public List<Integer> findMemberCountByMonths(List<String> month) {
        //存放会员数量 会员数量越来越多
        List<Integer> list = new ArrayList<Integer>();
        for (String s : month) {
            //遍历月份
            s = s + ".31";
            //查询会员数量
            Integer count = memberDao.findMemberCountBeforeDate(s);
            //加入list集合
            list.add(count);
        }
        return list;
    }
}
